// 表达式编辑器类型定义

export interface Variable {
  name: string      // 变量名称（在表达式中使用）
  label: string     // 变量标签（用于提示）
  type: string      // 变量类型（用于校验和提示）
}

export interface ValidationResult {
  isValid: boolean
  errors: ValidationError[]
  warnings: ValidationWarning[]
}

export interface ValidationError {
  message: string
  position?: number
  type: 'syntax' | 'variable' | 'type'
}

export interface ValidationWarning {
  message: string
  position?: number
  type: 'performance' | 'style'
}

export interface ExpressionEditorProps {
  modelValue: string                    // 表达式内容
  systemVariables?: Variable[]         // 系统变量列表
  formVariables?: Variable[]           // 表单变量列表
  showVariableHelp?: boolean          // 是否显示变量提示，默认true
  showExample?: boolean               // 是否显示示例，默认true
  showSyntaxDoc?: boolean             // 是否显示语法文档，默认false
  placeholder?: string                // 输入框占位符
  readonly?: boolean                  // 是否只读
}

export interface ExpressionEditorEmits {
  'update:modelValue': [value: string]
  'validate': [result: ValidationResult]
}

export interface Suggestion {
  label: string       // 显示文本
  value: string       // 插入值
  type: 'variable' | 'function' | 'operator'
  description?: string // 描述信息
  meta?: {            // 额外元数据
    type?: string
    example?: string
    priority?: number
    isMethod?: boolean      // 是否为方法（如 now().Year()）
    variableArgs?: boolean  // 是否支持可变参数（如 max(1,2,3)）
  }
}

// 文本插入上下文接口
export interface TextInsertionContext {
  cursorPosition: number        // 当前光标位置
  partialWord: string          // 正在输入的部分单词
  wordStartPosition: number    // 当前单词的开始位置
  wordEndPosition: number      // 当前单词的结束位置
  shouldReplace: boolean       // 是否应该替换而不是插入
  selectedText?: string        // 任何当前选中的文本
}

// 单词边界信息接口
export interface WordBoundary {
  word: string      // 完整单词
  start: number     // 开始位置
  end: number       // 结束位置
}

// 建议插入选项接口
export interface SuggestionInsertionOptions {
  replacePartial: boolean      // 是否替换部分文本
  cursorOffset?: number        // 光标偏移量（从插入文本末尾计算）
  preserveSelection?: boolean  // 是否保留选择
}

// 增强的建议接口
export interface EnhancedSuggestion extends Suggestion {
  insertionMode?: 'replace' | 'insert' | 'append'  // 插入模式
  cursorOffset?: number        // 从插入文本末尾的偏移量
  preserveCase?: boolean       // 是否保留用户的大小写
}

// 光标定位工具类型
export type CursorPositionMode = 'end' | 'start' | 'between-parentheses' | 'after-operator' | 'custom'

export interface CursorPositionConfig {
  mode: CursorPositionMode
  offset?: number              // 自定义偏移量
  preserveSelection?: boolean  // 是否保留当前选择
}

// 插入模式枚举
export type InsertionMode = 'replace' | 'insert' | 'append'

// 文本插入结果接口
export interface TextInsertionResult {
  success: boolean
  newCursorPosition: number
  insertedText: string
  replacedText?: string
  error?: string
}

export interface VariableManager {
  systemVariables: Variable[]    // 系统变量
  formVariables: Variable[]      // 表单变量
  
  getAllVariables(): Variable[]
  getVariablesByType(type: string): Variable[]
  validateVariableName(name: string): boolean
}

export interface AutoCompleteProvider {
  // 获取变量提示
  getVariableSuggestions(input: string): Suggestion[]
  
  // 获取函数提示
  getFunctionSuggestions(input: string): Suggestion[]
  
  // 获取操作符提示
  getOperatorSuggestions(context: string): Suggestion[]
}

export interface ExpressionValidator {
  // 语法验证
  validateSyntax(expression: string): ValidationResult
  
  // 变量引用验证
  validateVariables(
    expression: string, 
    availableVars: Variable[]
  ): ValidationResult
  
  // 类型兼容性验证
  validateTypes(expression: string): ValidationResult
}